#各种装饰器的语法
'''
#1,普通装饰器
#外函数
def outer(func):
    #内函数
    def inner():
        print('找个妹子,拿下微信')
        func()
        print('去看电影,去肯德基')
    return inner
@outer
def love():
    print('压马路,聊人生')

love()
'''
'''2,装饰器的嵌套  
    下层装饰器修饰后的函数,再次被上层装饰器修饰

def kuozhan(func):
    def inner():
        print('看见一个妹子')
        func()
        print('去肯德基')
    return inner

def outer(func):
    def inner():
        print('找妹子,拿个微信')
        func()
        print('约妹子看电影')
    return inner
@kuozhan
@outer
def love():
    print('和妹子压马路')

love()
'''
'''
3,对待参数的函数进行修饰
#外函内参
#外函数
def outer(func):
    def inner(name):
        print(f'{name}要了妹子微信')
        func(name)
        print(f'{name}和妹子去看电影了')
    return inner
@outer
def love(name):
    print(f'{name}和妹子聊得不错')

love('我')
'''
'''4,对多参数的函数进行修饰
def outer(func):
    def inner(who,name,*args):
        print(f'{who}跟{name}要了微信')
        func(who,name,*args)
        print(f'{who}和{name}去肯德基')
    return inner

@outer
def love(who,name):
    print(f'{who}和{name}压压马路')

love('我','那谁')
'''

'''5,带参数的装饰器 修饰 无参数的函数
#如果装饰器需要有参数,name给当前的装饰器函数套一个外壳
#来接收装饰器的参数
def ke(what):
    def outer(func):
        # print(what)
        def inner1():
            print('加妹子微信')
            func()
            print('看电影')
        def inner2():
            print('妹子给了我微信,也教会了我什么叫人生')
        if what=='高富帅':
            return inner1
        else:
            return inner2
    return outer
@ke('高')
def love():
    print('和妹子压马路')

love()
'''
'''6,对类内部的方法进行修饰
def outer(func):
    def inner(var):
        print('拿到妹子微信')
        func(var)
        print('看一场电影')
    return inner

class Demo():
    @outer
    def love(self):
        print('和妹子聊聊人生理想')

a=Demo()
a.love()
'''

'''7,用类  装饰原函数
class Outer():
    def __call__(self,func):
        self.func=func
        return self.newinner

    def newinner(self,w):
        print('拿到妹子微信')
        self.func(w)
        print('看一场电影')

@Outer()
def love(who):
    print(f'{who}和妹子谈理想')

love('川哥')
'''

'''8用类方法,装饰函数
class Outer():
    def newinner(func):
        Outer.func=func
        return Outer.inner

    def inner():  #用类方法,不能穿参数
        print('拿到妹子微信')
        Outer.func()
        print('看一场电影')

@Outer.newinner
def love():
    print('和妹子聊人生')

love()

'''














































